今天就來第9題吧~
判斷一個整數是否是回文數。回文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。
1.處理特殊情況:
(1)如果 x 是負數,直接返回 false,因為負數不可能是回文數。
(2)如果 x 不是 0 且最後一位數是 0(如 10、100 等),則返回 false,因為這些數字無法是回文數。
2.反轉一半的數字:
(1)使用 while (x > reversedHalf),每次取出 x 的最後一位,並加入到反轉後的數字 reversedHalf 中,同時將 x 的最後一位去掉。
(2)這樣可以只處理數字的一半,而不必將整個數字轉換為一個數列。
3.比較:
(1)當迴圈結束時,如果 x 和 reversedHalf 相等,或者 x 等於 reversedHalf / 10(處理奇數長度的情況),數字是回文,返回 true。
4.返回結果:
(1)如果兩部分數字不相等,返回 false;如果相等,則返回 true。
class Solution {
public:
bool isPalindrome(int x) {
// 負數不可能是回文數
if (x < 0) return false;
// 如果數字是0,或者最後一位是0且數字不為0,則不可能是回文
if (x != 0 && x % 10 == 0) return false;
int reversedHalf = 0;
while (x > reversedHalf) {
reversedHalf = reversedHalf * 10 + x % 10; // 將數字的一半反轉
x /= 10; // 去掉數字的最後一位
}
// 當 x 等於反轉後的數字,或者當數字是奇數長度時,中間的數字無關緊要
return x == reversedHalf || x == reversedHalf / 10;
}
};